package com.tedu.api;

import org.junit.Test;

public class StringBuilderAPI {
    //字符串大量拼接：注意String造成内存溢出
    @Test
    public void testString() {
    }

    /**
     * String-----不可改变对象    BUG（常量池
     * 假设：拼接1000000000000W个String----内存（开销过大）
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间---程序，电脑会卡
     * <p>
     * 解决方案：不创建对象
     * StringBuilder对象       可变字符串对象
     * 语法StringBuilder sb=new  StringBuilder(字符串)
     * <p>
     * c语言     变量  int a=malloc(4);   开辟4个字节空间
     * a=1;
     * free（0）;    清理内存
     * 不会存在内存溢出
     * Java     变量  int a=1   内存空间a空间，保存1.JVM虚拟机提供GC功能
     * 会在内存溢出
     */
    @Test
    public void testSB() {
        //创建一个可变字符串对象【解决String大量拼接，造成内存溢出】
        String str = "你就是我的";
        StringBuilder sb = new StringBuilder(str);
        //append方法   添加新字符串，等同与加号【拼接】
        sb.append("小可爱");
        System.out.println(sb);
    }
    //*************
    /**
     * replace方法   替换    返回值：String
     * 作业：可以将字符串中指定范围内“内容”替换成给定的内容
     *     含头不含尾
     *     replace（int start ,int end ,String str ）
     *     开始位置，  结束位置  替换位置
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类，构造器中直接传字符
        StringBuilder sb=new StringBuilder("你就是我的小可爱");
        sb.replace(5,8,"小baby");
        System.out.println(sb);
    }

    /**
     * inster方法       插入    返回值：String
     * 作业：将给定的
     */
    @Test
    public void testInster(){
        //创建  可变字符串对象
        StringBuilder sb=new StringBuilder("你就是我的小可爱");
        sb.insert(0,"今天");
        System.out.println(sb);
    }
    /**考试题
     *StringBuilder和StringBuffer的区别
     *StringBuilder和StringBuffer----方法完全一致【追加，替换，插入】
     * StringBuffer----JDK1.0-----线程安全【效率低】
     * StringBuilder----JDK1.5----线程不安全【效率高】 √
     *
     * 需求说明书：模块用什么类【标注】   业务
     */
}
